import java.util.concurrent.;

public class 模拟Web服务器处理用户请求{

    public static void main(String[] args) {
         创建 ThreadPoolExecutor
        ThreadPoolExecutor executor = new ThreadPoolExecutor(
            5,           核心线程数：始终保持运行的线程数量
            10,          最大线程数：最多可创建的线程数量
            60L,         空闲线程存活时间（秒）
            TimeUnit.SECONDS,   时间单位
            new LinkedBlockingQueue(10)   任务队列：最多等待10个任务
        );

         提交大量任务（模拟高并发请求）
        int taskCount = 30;
        for (int i = 1; i = taskCount; i++) {
            final int requestId = i;

             创建任务（实现 Runnable 接口的匿名内部类）
            Runnable task = new Runnable() {
                @Override
                public void run() {
                    try {
                        System.out.println(线程 [ + Thread.currentThread().getName() +
                            ] 正在处理请求 REQ- + requestId);

                         模拟处理耗时（如数据库查询、网络调用）
                        Thread.sleep(1000 + (long)(Math.random()  1000));  1~2秒

                        System.out.println(✅ 线程 [ + Thread.currentThread().getName() +
                            ] 完成请求 REQ- + requestId);

                    } catch (InterruptedException e) {
                        Thread.currentThread().interrupt();  保持中断状态
                        System.err.println(任务被中断 REQ- + requestId);
                    }
                }
            };

             提交任务到线程池
            executor.execute(task);
        }

         关闭线程池：先拒绝新任务，再等待已提交任务完成
        executor.shutdown();

         等待所有任务完成（最多等待 30 秒）
        try {
            System.out.println(正在等待所有任务完成...);
            if (!executor.awaitTermination(30, TimeUnit.SECONDS)) {
                System.out.println(仍有任务未完成，强制关闭。);
                executor.shutdownNow();  强制中断正在执行的任务
            } else {
                System.out.println(所有任务已完成，线程池已安全关闭。);
            }
        } catch (InterruptedException e) {
            System.out.println(等待过程中被中断，正在关闭线程池...);
            executor.shutdownNow();
            Thread.currentThread().interrupt();
        }
    }
}